"Social Justice" and corporate impunity controversy prelimenary research

Hypothesis:

Anybody remotely sane that follows the news will have noticed a recent uptick in the past 4 or so years in leftist insanity regarding issues of so-called "social justice". I believe there is now a regular pattern of companies committing some faux pas according to the "social justice" left, usually pertaining to some percieved racism or sexism committed by the company or a reprasentative of the company. While it's true that only a small percentage of people actually believe in this far-left conception of "social justice", the true believers are for various reasons disproportionately represented in the media, meaning that these "faux-faux-pas" are often highlighted disproportionately in the news.

To complicate matters, we live in a society run amuck with corporate facism, by which I mean that corporations of certain sizes and industries recieve special government privilege, absolving the individuals responsible for them of legal responsibility for even blatant negligence and incompetence (aka impunity, see Equifax/Google/Facebook/etc). In this case, the justified outrage is often reported in the media as well.

My intuition is that these controversies can effect the market in a predictable way: when companies of a certain size or status (this will need a better definition) come under fire for faux or real controversy, the market responds emotionally. Angry/offended traders, or traders who believe many others will be angry/offended, undervalue the stock of the company under fire.

In the case of the "social justice" controversies, I predict that the company under fire takes a hit for superficial reasons, but their true underlying value is unnaffected. As I said previously, only a small portion of people genuinely believe in the far-left conception of "social justice", and I think that we can reasonably assume that an even smaller portion of those will actually change their purchasing behavior in response to said controversy. Therefore, the emotional reaction to the controversy will cause the stock to be undervalued and presents an opportunity for us to buy low and sell high.

In the case of corporate impunity controversies, my hypothesis is that the company under fire will again take a hit, this time due to genuine moral failings. However due to rampant corporatism, this short term dip in price will reliably be reversed, since these corporations are largely immune to their criminal or ethical failings and via government privilege will remain as valuable as before. Again this miscalculation by the market to recognize this impunity will be another opportunity to buy low and sell high.

Verification

Of course everything above is merely my own intuition and speculation. In order to determine whether this hypothesis is actually true, I have gathered data from a variety of recent controversies over the past few years, starting from the articles listed below. I verified the dates and circuimstances of each controversy through further research (those sources will be enumerated later alongside their relevant stock market data). Many thanks to some guy named Geoffery James who apparently has made corporate scandal recaps his forte.

In order to determine if there is any validity to my hypothesis, my strategy is to visualize the relevant stock price data around what I've determined to be the start time of each controversy. To do this, I will create graphs of relevant stock data 30 days, 90 days, and 180 days either side of the date of the controversy (simply ignoring weekends). These timeframes are chosen to give a picture of data over multiple relevant timeframes, and can be easily adjusted later if it's determined that different angles should be looked at. The adjusted close value is used.

Data

The spreadsheet detailing my manual research (saved as CSV) can be be found under data/controversy_data.csv (or click link to download).

The stock market data is taken from the Alpha Vantage API, which is a freemium service that appears to get good reviews based on some cursory Google searches.

Technical notes

Each row of the CSV data is converted to a Controversy object defined in model/Controversy.py

Unfortunately for the free version of the Alpha Vantage service, they have an API call limit but leave that up for the user to guess at (idk what the strategy is here, maybe they're just trying to piss the user off enough to give up and pay for the premium service.). I've found that if I limit call volume to once per minute, I can safely assume I won't get locked out. In order to prevent my code from taking ~60-90 minutes to compute every time it's run, I've chosen to create a separate script to make all the API calls to gather the stock market, and then serialize the list of Controversy objects -- each including their relevant stock data -- into a data/controversies.pickle. This way, I can simply run this time-expensive script to gather the data once and quicken my iteration cycle for code doing the actual parsing and displaying of the data.

Results

Load Data

In [1]:
import pandas as pd
import pickle
from datetime import datetime
import model
from model.Controversy import Controversy
import matplotlib.pyplot as plt
from IPython.display import Markdown, display

def printmd(string):
    display(Markdown(string))

PIK = "data/controversies.pickle"

# load list of controversies
with open(PIK, "rb") as f:
    controversies = pickle.load(f)

# sort alphabetically
controversies.sort(key=lambda x: x.date)

Generate Analysis

In [2]:
%matplotlib inline
%pylab inline
import pylab
pylab.rcParams['figure.figsize'] = (16, 4) # set figure size

def gen_graph_output(controversy):
    try:
        display(Markdown("### " + controversy.company))
        print("Relevant Stock(s): {}".format(controversy.stocks))
        print("Date: {}".format(controversy.date.strftime("%Y-%m-%d")))
        print("Summary: {}".format(controversy.summary))
        if controversy.notes == controversy.notes: #hack-y way to check for nan vals
            print("Notes: {}".format(controversy.notes))
        print("Source: {}".format(controversy.source))
        N_days = [7, 30, 90, 180]
        for N in N_days:
            controversy.get_N_day_plot(N)
        plt.show()
        print()
        print()
    except:
        plt.show()
        print("No Data")
        print()
        print()
        pass
    
i = -1
Populating the interactive namespace from numpy and matplotlib
/Users/ibeckermayer/.virtualenvs/sjwtrader/lib/python3.7/site-packages/IPython/core/magics/pylab.py:160: UserWarning: pylab import has clobbered these variables: ['f', 'datetime']
`%matplotlib` prevents importing * from pylab and numpy
  "\n`%matplotlib` prevents importing * from pylab and numpy"
In [3]:
i+=1
con = controversies[i]
gen_graph_output(con)

US Airways Group Inc

Relevant Stock(s): ['LCC']
Date: 2014-04-14
Summary: US Airways Tweeted An Extreme Pornographic Image And Left It Up For A Long Time
Source: https://www.businessinsider.com/us-airways-pornographic-tweet-2014-4
/Users/ibeckermayer/.virtualenvs/sjwtrader/lib/python3.7/site-packages/matplotlib/figure.py:2362: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.
  warnings.warn("This figure includes Axes that are not compatible "

Analysis

Bad data, ignore.

In [4]:
con.categories = ["ignore"]
con.is_promising = False

In [5]:
i+=1
con = controversies[i]
gen_graph_output(con)

YUM!

Relevant Stock(s): ['YUM', 'MCD']
Date: 2014-07-21
Summary: McDonald's, KFC Snagged By New Food Safety Scandal In China
Notes: It looks like this would also affect MCD, see article
Source: https://www.forbes.com/sites/briansolomon/2014/07/21/mcdonalds-kfc-snagged-by-new-food-safety-scandal-in-china/#5bb879594166

Analysis

There's no business argument for this incident. This is the only food safety based controversy in the list, so it's difficult to determine anything from this datapoint.

In [6]:
con.categories = ["food"]
con.is_promising = False

In [7]:
i+=1
con = controversies[i]
gen_graph_output(con)

Walmart

Relevant Stock(s): ['WMT']
Date: 2014-10-21
Summary: Walmart's Website Features a Section of 'Fat Girl Costumes'
Notes: LMFAO
Source: https://jezebel.com/walmarts-website-features-a-section-of-fat-girl-costum-1651125569

Analysis

This is clearly SJW rage. Opposite to my hypothesis, there is no market reaction.

In [8]:
con.categories = ["sjw", "offensive"]
con.is_promising = False

In [9]:
i+=1
con = controversies[i]
gen_graph_output(con)

Target

Relevant Stock(s): ['TGT']
Date: 2014-10-22
Summary: Petition targets ‘Breaking Bad’ action figures
Source: https://www.pressherald.com/2014/10/22/petition-targets-breaking-bad-action-figures/

Analysis

There doesn't appear to be much to this incident. The story wasn't "SJW" outrage persay, if anything this is an outrage likely to be driven by conservatives. This does however fall into the broader category of "offensive" outrages, which I will define as an incident where no real crime was committed and no real business operation was demonstrated, people were just offended by ideas.

In [10]:
con.categories = ["conservative", "offensive"]
con.is_promising = False

In [11]:
i+=1
con = controversies[i]
gen_graph_output(con)

Comcast Corporation

Relevant Stock(s): ['CMCSA']
Date: 2015-01-28
Summary: Comcast called a customer an asshole in writing
Source: https://www.elliott.org/is-this-enough-compensation/comcast-thinks-husband-ahole-put-writing/

Analysis

There appears to be a big dip after this incident. Although this isn't the typical social justice outrage, it's similar in character in that the outrage is an emotional reaction to a specific superficial detail that isn't directly related to the company's bottom line. Comcast does well because it's a state-backed monopoly, nobody chooses them for their superior customer service.

In [12]:
con.categories = ["offensive"]
con.is_promising = True

In [13]:
i+=1
con = controversies[i]
gen_graph_output(con)

TLC

Relevant Stock(s): ['DISCA', 'DISCB', 'DISCK']
Date: 2015-05-21
Summary: Josh Duggar Molestation controversy
Notes: TLC is owned by Discovery Inc (source: https://en.wikipedia.org/wiki/TLC_(TV_network))
Source: https://en.wikipedia.org/wiki/Josh_Duggar#Molestation_controversy

Analysis

Difficult to see a strong pattern in this data. That slight drop could be due to the controversy, however the stock was already on a similar downard slope shortly before.

In [14]:
con.categories = ["sex", "crime"]
con.is_promising = False

In [15]:
i+=1
con = controversies[i]
gen_graph_output(con)

Amazon

Relevant Stock(s): ['AMZN']
Date: 2015-08-15
Summary: Amazon conducting an experiment on how far it can push it's white collar workers
Source: https://www.nytimes.com/2015/08/16/technology/inside-amazon-wrestling-big-ideas-in-a-bruising-workplace.html?_r=0

Analysis

There is a noticable dip several days after this controversy, although it's not immediate. Still there may be some promise here.

In [16]:
con.categories = ["workers"]
con.is_promising = True

In [17]:
i+=1
con = controversies[i]
gen_graph_output(con)

Volkwagen

Relevant Stock(s): ['VWAGY']
Date: 2015-09-18
Summary: VW is told to recall 482,000 cars in the US after it is caught deploying sophisticated software to cheat emissions tests 
Source: https://www.theguardian.com/business/2015/dec/10/volkswagen-emissions-scandal-timeline-events
No data for these dates
No Data


Analysis

Couldn't get data on this one unfortunately.

In [18]:
con.categories = ["ignore"]
con.is_promising = False

In [19]:
i+=1
con = controversies[i]
gen_graph_output(con)

Nestle

Relevant Stock(s): ['NSRGY']
Date: 2015-11-23
Summary: Nestle Finds Abuse, Forced Labor by Thai Seafood Suppliers
Source: https://www.bloomberg.com/news/articles/2015-11-24/nestle-finds-abuse-forced-labor-by-its-thai-seafood-suppliers

Analysis

Nestle somehow went utterly untouched by this slavery controversy. Perhaps it's due to the fact that it was brought to light by the company itself (see article)? This one is puzzling to me.

In [20]:
con.categories = ["criminal"]
con.is_promising = False

In [21]:
i+=1
con = controversies[i]
gen_graph_output(con)

Cigna

Relevant Stock(s): ['CI']
Date: 2016-01-22
Summary: Cigna temporarily banned from new Medicare plans
Notes: disclosed late on the 21st but the news seems to have become widely known on the 22
Source: https://www.usatoday.com/story/money/2016/01/22/cigna-medicare-sanctions/79160738/

Analysis

This incident appears to have caused a short term drop in price. Not as immediate as some of the others, but still of promise.

In [22]:
con.categories = ["impunity", "healthcare"]
con.is_promising = True

In [23]:
i+=1
con = controversies[i]
gen_graph_output(con)

Foxconn

Relevant Stock(s): ['2354.TW', '2317.TW']
Date: 2016-08-23
Summary: Foxconn worker suicides
Notes: Not clear how widely this became known but worth an investigation. Also not clear which of the listed stock abbreviations is correct
Source: https://www.sdcexec.com/risk-compliance/news/12248367/latest-foxconn-worker-deaths-build-case-for-apple-to-move-operations-from-china

Analysis

There is a sharp downward spike soon after the report, near Sept 15. I investigated that, and it appears to be a regular drop that comes soon before Apple's annual September announcement (https://www.marketwatch.com/story/how-apples-stock-tends-to-trade-around-its-september-event-2016-09-06). That itself may be something to investigate further in a future study. On further thought, I decided to look at Apple's stock as well (see below).

In [24]:
con.categories = ["workers"]
con.is_promising = False

In [25]:
i+=1
con = controversies[i]
gen_graph_output(con)

Apple

Relevant Stock(s): ['AAPL']
Date: 2016-08-23
Summary: Foxconn worker suicides
Notes: Interested if Foxconn news affects Apple stock...
Source: https://www.sdcexec.com/risk-compliance/news/12248367/latest-foxconn-worker-deaths-build-case-for-apple-to-move-operations-from-china

Analysis

There is a downward spike similar to Foxconn near Sept 15.

In [26]:
con.categories = ["workers"]
con.is_promising = False

In [27]:
i+=1
con = controversies[i]
gen_graph_output(con)

Wells Fargo

Relevant Stock(s): ['WFC']
Date: 2016-09-08
Summary: Wells Fargo Opened a Couple Million Fake Accounts
Source: https://www.bloomberg.com/view/articles/2016-09-09/wells-fargo-opened-a-couple-million-fake-accounts

Analysis

This appears to be a classic case of corporate impunity. WF took a short term blow before bouncing back up. (When is the last time a bank went out of business for fraud?)

In [28]:
con.categories = ["impunity", "fraud"]
con.is_promising = True

In [29]:
i+=1
con = controversies[i]
gen_graph_output(con)

Yahoo

Relevant Stock(s): ['AABA']
Date: 2016-12-14
Summary: Yahoo says 1 billion user accounts stolen in what could be biggest hack ever
Notes: Altaba Inc. is the company that owns Yahoo
Source: https://www.businessinsider.com/yahoo-data-breach-billion-accounts-2016-12?r=UK&IR=T

Analysis

Clear, sharp drop upon news of the hack, followed by predictable rise as people rediscover that large corporations are immune to gross negligence.

In [30]:
con.categories = ["impunity", "hack"]
con.is_promising = True

In [31]:
i+=1
con = controversies[i]
gen_graph_output(con)

Disney

Relevant Stock(s): ['DIS']
Date: 2017-02-14
Summary: Disney Severs Ties With YouTube Star PewDiePie After Anti-Semitic Posts
Source: https://en.wikipedia.org/wiki/PewDiePie#Controversies,_release_from_network,_and_streaming_(2017)

Analysis

Disney seems to have gone untouched by this controversy. On further thought, I decided to see if YouTube (GOOG) felt the blow (see below).

In [32]:
con.categories = ["sjw", "offensive"]
con.is_promising = False

In [33]:
i+=1
con = controversies[i]
gen_graph_output(con)

YouTube

Relevant Stock(s): ['GOOG']
Date: 2017-02-14
Summary: Disney Severs Ties With YouTube Star PewDiePie After Anti-Semitic Posts
Notes: GOOG owns YouTube, but apparently accounts for only 3% of the company's value (source: https://www.thestreet.com/story/10887954/1/youtube-growth-impact-on-google-stock.html)
Source: https://en.wikipedia.org/wiki/PewDiePie#Controversies,_release_from_network,_and_streaming_(2017)

Analysis

Nothing here either.

In [34]:
con.categories = ["sjw", "offensive"]
con.is_promising = False

In [35]:
i+=1
con = controversies[i]
gen_graph_output(con)

Uber

Relevant Stock(s): ['GOOG', 'MSFT', 'BLK']
Date: 2017-02-19
Summary: Susan Fowler publishes her damning look into UberÂ’s cultural problems
Notes: Uber remains private but GOOG-MSFT-BLK are proxies, being big investors (source: https://www.investopedia.com/articles/investing/101415/ways-invest-uber-it-goes-public.asp)
Source: https://www.recode.net/2017/8/20/16164176/uber-2017-timeline-scandal

Analysis

I have several Uber controversies in this analysis, just because they had so many juicy stories to pick from in the recent past. Unfortunately they're privately held, and their controversies don't appear to make any sort of dent in their large stakeholders. I'm leaving these in this inital analysis so we know that Uber isn't a good company to target (at least until they decide to go public). I'm going to ignore them in future analyses, however, because I believe that the proxies I've chosen aren't really proxies at all, and keeping them in would throw off what might be actually useful statistical results.

In [36]:
con.categories = ["ignore"]
con.is_promising = False

In [37]:
i+=1
con = controversies[i]
gen_graph_output(con)

Uber

Relevant Stock(s): ['GOOG', 'MSFT', 'BLK']
Date: 2017-02-28
Summary: A video of Kalanick berating an Uber driver surfaces
Notes: Uber remains private but GOOG-MSFT-BLK are proxies, being big investors (source: https://www.investopedia.com/articles/investing/101415/ways-invest-uber-it-goes-public.asp)
Source: https://www.recode.net/2017/8/20/16164176/uber-2017-timeline-scandal

Analysis

Ignore.

In [38]:
con.categories = ["ignore"]
con.is_promising = False

In [39]:
i+=1
con = controversies[i]
gen_graph_output(con)

United Airlines

Relevant Stock(s): ['UAL']
Date: 2017-03-26
Summary: Two girls barred from United flight for wearing leggings
Source: https://www.bostonglobe.com/news/nation/2017/03/26/two-girls-barred-from-united-flight-for-wearing-leggings/WSVuMJEykxM85db1CCzB2N/story.html

Analysis

There's no noticable direct market response to this controversy.

In [40]:
con.categories = ["sjw", "offensive"]
con.is_promising = False

In [41]:
i+=1
con = controversies[i]
gen_graph_output(con)

Uber

Relevant Stock(s): ['GOOG', 'MSFT', 'BLK']
Date: 2017-03-28
Summary: Uber publishes its diversity numbers for the first time ever
Notes: Uber remains private but GOOG-MSFT-BLK are proxies, being big investors (source: https://www.investopedia.com/articles/investing/101415/ways-invest-uber-it-goes-public.asp)
Source: https://www.recode.net/2017/8/20/16164176/uber-2017-timeline-scandal

Analysis

Ignore.

In [42]:
con.categories = ["ignore"]
con.is_promising = False

In [43]:
i+=1
con = controversies[i]
gen_graph_output(con)

Fox

Relevant Stock(s): ['FOXA']
Date: 2017-04-01
Summary: Bill O'Reilly sexual assault
Source: http://www.latimes.com/entertainment/tv/la-et-st-bill-oreilly-controversy-timeline-20170420-htmlstory.html#

Analysis

It looks like Fox's stock takes a hit directly in reponse to this controversy, as demonstrated by the fact that it reaches a local maximum on the day of the controversy. Unlike some of the other controversies, this controversy seems to have had a longer term impact on Fox's stock evaluation.

In [44]:
con.categories = ["sex", "offensive"]
con.is_promising = True

In [45]:
i+=1
con = controversies[i]
gen_graph_output(con)

United Airlines

Relevant Stock(s): ['UAL']
Date: 2017-04-10
Summary: Pulled passenger off of flight
Source: https://www.youtube.com/watch?v=VrDWY6C1178

Analysis

This result really surprised me: there doesn't appear to be any significant in United's stock prince due to this widely publicized incident. There is a blip a few days afterward, but it looks difficult to argue that it's distinguishible from the normal turbulence (pun intended sue me) seen previous to and since the controversy.

In [46]:
con.categories = ["offensive"]
con.is_promising = False

In [47]:
i+=1
con = controversies[i]
gen_graph_output(con)

Facebook

Relevant Stock(s): ['FB']
Date: 2017-04-10
Summary: Zuckerberg testifies over Russian interference
Source: https://www.youtube.com/watch?v=cyJosQBtzsw

Analysis

It's possible that there's a slight downturn after this incident but if so, it's insignificant. I'm classifying this "sjw" because it's the sort of controversy that the political left would be most concerned with.

In [48]:
con.categories = ["sjw", "politics", "congress"]
con.is_promising = False

In [49]:
i+=1
con = controversies[i]
gen_graph_output(con)

Uber

Relevant Stock(s): ['GOOG', 'MSFT', 'BLK']
Date: 2017-06-13
Summary: David Bonderman, board member, makes a sexist joke and steps down from the board
Notes: Uber remains private but GOOG-MSFT-BLK are proxies, being big investors (source: https://www.investopedia.com/articles/investing/101415/ways-invest-uber-it-goes-public.asp)
Source: https://www.recode.net/2017/8/20/16164176/uber-2017-timeline-scandal

Analysis

Ignore.

In [50]:
con.categories = ["ignore"]
con.is_promising = False

In [51]:
i+=1
con = controversies[i]
gen_graph_output(con)

Uber

Relevant Stock(s): ['GOOG', 'MSFT', 'BLK']
Date: 2017-06-20
Summary: The impossible happens and Kalanick resigns
Notes: Uber remains private but GOOG-MSFT-BLK are proxies, being big investors (source: https://www.investopedia.com/articles/investing/101415/ways-invest-uber-it-goes-public.asp)
Source: https://www.recode.net/2017/8/20/16164176/uber-2017-timeline-scandal

Analysis

Ignore.

In [52]:
con.categories = ["ignore"]
con.is_promising = False

In [53]:
i+=1
con = controversies[i]
gen_graph_output(con)

Google

Relevant Stock(s): ['GOOG']
Date: 2017-08-04
Summary: James Damore diversity manifesto
Source: https://www.businessinsider.com/google-engineer-anti-diversity-manifesto-causes-uproar-2017-8

Analysis

I expected there to be an obvious response in the stock prince due to this incident but frankly there isn't. It could perhaps be argued that the sharp minima in the week after the controversy is directly related, but it appears insignificantly small and difficult to distinguish from normal market turbulence.

In [54]:
con.categories = ["sjw", "offensive"]
con.is_promising = False

In [55]:
i+=1
con = controversies[i]
gen_graph_output(con)

Samsung

Relevant Stock(s): ['EWY']
Date: 2017-08-25
Summary: Samsung's Bribery Charges
Notes: No data on the official stock price but using an ETF 22% of its assets invested in Samsung as a proxy.
Source: https://www.bbc.com/news/business-41033568

Analysis

There's arguably a downswing shortly after this controversy, although it's not obvious that it's directly related. Using an ETF proxy seems inherently very risky for short term speculation, because other stocks in the fund could be behaving in direct opposition to whatever you're tracking. Not a good lead for that reason.

In [56]:
con.categories = ["criminal", "impunity"]
con.is_promising = False

In [57]:
i+=1
con = controversies[i]
gen_graph_output(con)

Facebook

Relevant Stock(s): ['FB']
Date: 2017-09-06
Summary: Facebook says fake accounts linked to Russia bought thousands of ads during US election
Source: https://www.businessinsider.com/facebook-says-fake-accounts-linked-to-russia-bought-ads-during-us-election-2017-9

Analysis

It would be difficult to argue that it's in direct relation to this controversy, however the nosedive a couple of weeks later may warrant further investigation.

In [58]:
con.categories = ["sjw", "politics"]
con.is_promising = False

In [59]:
i+=1
con = controversies[i]
gen_graph_output(con)

Equifax

Relevant Stock(s): ['EFX']
Date: 2017-09-07
Summary: Equifax Hackers Steal Personal Details of Up to 143 Million People
Source: http://fortune.com/2017/09/07/equifax-hackers-personal-details-143-million-people/

Analysis

Very dramatic obvious overeaction to this hack, followed by a correction upward. Promising.

In [60]:
con.categories = ["hack", "impunity"]
con.is_promising = True

In [61]:
i+=1
con = controversies[i]
gen_graph_output(con)

Amazon

Relevant Stock(s): ['AMZN']
Date: 2017-09-20
Summary: Staff At Flagship Amazon Site Take Home Less Than Minimum Wage After Paying Bus 'Benefit'
Source: https://www.huffingtonpost.co.uk/entry/amazon-rugeley-minimum-wage-bus-costs_uk_59c12317e4b0186c2205c5ff?guccounter=1&guce_referrer_us=aHR0cHM6Ly93d3cudGhlc3RyZWV0LmNvbS9zdG9yeS8xNDMxMjUzOS8xL2FtYXpvbi13YXJlaG91c2UtZW1wbG95ZWVzLWRpc2N1c3MtZ3J1ZWxpbmctd29yay5odG1s&guce_referrer_cs=rKDsURPz4ZSrUv1l0QVmsQ

Analysis

Nothing of particular interest here.

In [62]:
con.categories = ["workers"]
con.is_promising = False

In [63]:
i+=1
con = controversies[i]
gen_graph_output(con)

Yahoo

Relevant Stock(s): ['AABA']
Date: 2017-10-03
Summary: Yahoo says all three billion accounts hacked in 2013 data theft
Source: https://www.reuters.com/article/us-yahoo-cyber/yahoo-says-all-three-billion-accounts-hacked-in-2013-data-theft-idUSKCN1C82O1

Analysis

There's no dramatic response to this controversy. It should be noted that this is news that came out in 2017 about an incident that happened in 2013. As of writing this, I haven't directly explored the 2013 incident, however have taken a note that it should be explored.

In [64]:
con.categories = ["hack", "impunity"]
con.is_promising = False

In [65]:
i+=1
con = controversies[i]
gen_graph_output(con)

YouTube

Relevant Stock(s): ['GOOG']
Date: 2017-11-04
Summary: On YouTube Kids, Startling Videos Slip Past Filters
Notes: GOOG owns YouTube, but apparently accounts for only 3% of the company's value (source: https://www.thestreet.com/story/10887954/1/youtube-growth-impact-on-google-stock.html)
Source: https://www.nytimes.com/2017/11/04/business/media/youtube-kids-paw-patrol.html?_r=0

Analysis

Again Google doesn't appear to take any sort of hit due to this YouTube based controversy. It could be that my SJW hypothesis is incorrect, it could also be that because YouTube represents only a small portion of Google's overall value (see Notes section above), it's controversies don't adversly affect the overall stock price.

In [66]:
con.categories = ["offensive"]
con.is_promising = False

In [67]:
i+=1
con = controversies[i]
gen_graph_output(con)

Electronic Arts Inc.

Relevant Stock(s): ['EA']
Date: 2017-11-12
Summary: Battlefront 2 in game purchases scandal
Notes: Dated this to the day of the Reddit AMA that resulted in the most downvoted comment in Reddit history
Source: https://www.reddit.com/r/StarWarsBattlefront/comments/7cff0b/seriously_i_paid_80_to_have_vader_locked/dppum98/

Analysis

This controversy resides in a category of its own, since it's not so much corporate impunity or a response to a social/political issue only deeply cared about by a small portion of the population, but rather what appears to have been an overwhelming majority response to shitty and manipulative business design. It don't think it pertains to my original hypothesis so I'm marking it as not promising.

In [68]:
con.categories = ["gaming"]
con.is_promising = False

In [69]:
i+=1
con = controversies[i]
gen_graph_output(con)

Uber

Relevant Stock(s): ['GOOG', 'MSFT', 'BLK']
Date: 2017-11-21
Summary: Uber Paid Hackers to Delete Stolen Data on 57 Million People
Notes: Uber remains private but GOOG-MSFT-BLK are proxies, being big investors (source: https://www.investopedia.com/articles/investing/101415/ways-invest-uber-it-goes-public.asp)
Source: https://www.bloomberg.com/news/articles/2017-11-21/uber-concealed-cyberattack-that-exposed-57-million-people-s-data

Analysis

Ignore.

In [70]:
con.categories = ["ignore"]
con.is_promising = False

In [71]:
i+=1
con = controversies[i]
gen_graph_output(con)

Apple

Relevant Stock(s): ['AAPL']
Date: 2017-11-28
Summary: There's an embarrassing and dangerous security hole in the latest Mac software
Source: https://www.businessinsider.com/macos-high-sierra-can-be-hacked-with-username-root-and-no-password-2017-11

Analysis

There appears a sharp dip in Apple price in direct response to this controversy.

In [72]:
con.categories = ["hack", "impunity"]
con.is_promising = True

In [73]:
i+=1
con = controversies[i]
gen_graph_output(con)

Apple

Relevant Stock(s): ['AAPL']
Date: 2017-12-20
Summary: Apple Is Slowing Down Your Old iPhone
Source: http://fortune.com/2017/12/20/apple-iphone-battery-slowdown/

Analysis

The gradual drop in the days after this controversy could be due to it, although it's not so obvious as some other minima in this analysis. Still, somewhat promising I looked into those two obvious drops apparent in the months after the controversy: the one in early February appears to be related to iPhone X sales numbers (https://www.zacks.com/stock/news/291358/heres-why-apple-aapl-stock-is-recovering-today), whereas the one in late April appears to be related to Morgan Stanley saying the company's iPhone sales for the June quarter will disappoint Wall Street (https://www.cnbc.com/2018/04/20/us-stock-futures-dow-data-earnings-tech-and-politics-on-the-agenda.html)

In [74]:
con.categories = ["impunity"]
con.is_promising = True

In [75]:
i+=1
con = controversies[i]
gen_graph_output(con)

Vice Media

Relevant Stock(s): ['DIS', 'FOX']
Date: 2017-12-23
Summary: Vice sexual harassment scandal
Notes: Vice remains private but big investors include DIS-FOXA (source: https://www.nasdaq.com/article/will-vice-media-ipo-in-2017-everything-investors-need-to-know-cm724799)
Source: https://www.nasdaq.com/article/will-vice-media-ipo-in-2017-everything-investors-need-to-know-cm724799

Analysis

There's no noticable direct market response to this controversy.

In [76]:
con.categories = ["sex", "offensive"]
con.is_promising = False

In [77]:
i+=1
con = controversies[i]
gen_graph_output(con)

Uber

Relevant Stock(s): ['GOOG', 'MSFT', 'BLK']
Date: 2018-01-28
Summary: The first #deleteUber movement
Notes: Uber remains private but GOOG-MSFT-BLK are proxies, being big investors (source: https://www.investopedia.com/articles/investing/101415/ways-invest-uber-it-goes-public.asp)
Source: https://www.recode.net/2017/8/20/16164176/uber-2017-timeline-scandal

Analysis

Ignore.

In [78]:
con.categories = ["ignore"]
con.is_promising = False

In [79]:
i+=1
con = controversies[i]
gen_graph_output(con)

Papa John's

Relevant Stock(s): ['PZZA']
Date: 2018-07-11
Summary: Papa John's Founder Used N-Word On Conference Call
Notes: Better ingredients. Better Pizza. Papa John's
Source: https://www.forbes.com/sites/noahkirsch/2018/07/11/papa-johns-founder-john-schnatter-allegedly-used-n-word-on-conference-call/#4990b7334cfc

Analysis

There's a strong, immediate market response to this controversy.

In [80]:
con.categories = ["sjw", "offensive"]
con.is_promising = True

In [81]:
i+=1
con = controversies[i]
gen_graph_output(con)

Facebook

Relevant Stock(s): ['FB']
Date: 2018-09-05
Summary: Sandberg testifies over Russian interference
Source: https://www.pbs.org/newshour/politics/read-ceo-jack-dorseys-full-testimony-on-twitter-and-political-bias

Analysis

There's no noticable direct market response to this controversy, there's something of a dip but it would be difficult to argue that it's distinguishable from normal turbulence.

In [82]:
con.categories = ["politics", "congress"]
con.is_promising = False

In [83]:
i+=1
con = controversies[i]
gen_graph_output(con)

Twitter

Relevant Stock(s): ['TWTR']
Date: 2018-09-05
Summary: Dorsey testifies over Russian interference
Source: https://www.pbs.org/newshour/politics/read-ceo-jack-dorseys-full-testimony-on-twitter-and-political-bias

Analysis

This happened the same day as Sandberg's testimony. In Twitter's case there appears to be a drop more directly related to the controversy however there is no bounce back so it wouldn't have been a profitable buy. Both companies have dramatic cliffs at the end of July, which I thought could have been related to an announcement of the testimony date or something of that sort. Upon further investigation it looks like it's instead related to (separate) metric reports by both companies (https://www.fool.com/investing/2018/07/28/tech-stocks-this-week-facebook-and-twitter-plummet.aspx)

In [84]:
con.categories = ["politics", "congress"]
con.is_promising = False

In [85]:
i+=1
con = controversies[i]
gen_graph_output(con)

Google

Relevant Stock(s): ['GOOG']
Date: 2018-09-05
Summary: Google exec testifies over Russian interference
Source: https://techcrunch.com/2018/09/04/larry-page-google-senate-intel-hearing/

Analysis

This again was the same day as Sandberg and Dorsey's testimonies, with the same result.

In [86]:
con.categories = ["politics", "congress"]
con.is_promising = False

Categories

One of the most difficult aspects to this project was determining which category to classify each controversy under. There's no perfectly objective way to choose categories, so I had to make vaguer judgement calls to create categories that I thought would be relevant for a meta analysis. The categories are of course debatable and I'm open to any feedback for how my categorization could be improved. There are also other ways that this could be categorized such as by industry or company-size; the domain of interest here is controversies, however, so I chose to categorize based on controversy traits.

We can visualize the categories below.

In [87]:
import importlib
#importlib.reload(model.Category)
from model.Category import Category

# dict for holding categories with category_name key
# dict makes it easier to build the list of Category objects
cats = {}

# Create cats dictionary
for con in controversies:
    for cat in con.categories:
        category = cats.get(cat)
        if category is None:
            category = Category(cat)
            cats[cat] = category
            category = cats[cat]
        category.add(con)

# flatten cats dictionary into list of Category
cats = [cats[k] for k in cats]

for cat in cats:
    print(cat.category)
ignore
food
sjw
offensive
conservative
sex
crime
workers
criminal
impunity
healthcare
fraud
hack
politics
congress
gaming

In my understanding of the meaning of each category, each of these is distinct and relevant. I figure that most of their definitions are self evident so haven't gone to great lengths to define them explicitly. The ones I predict might cause confusion are the difference between the "offensive" category (which is particularly relevant to my original hypothesis about faux outrages) and "sjw". To quote my explanation from the target controversy, "offensive" is a controversy where

no real crime was committed and no real business operation was demonstrated, people were just offended by ideas.

The "sjw" category pertains to which region of the political spectrum would likely find the controversy more relevant, if I deemed the controversy to be politically relevant at all.

Promise

The other way I categorized controversies was by whether or not I determined them to be promising based on the stock response to the controversy.

Whether or not to consider a controversy "promising" or not also presented a massive difficulty. Given that the idea will only be profitable if I could predict from the controversy itself that the stock will fall, I was looking for any data where the stock price appeared to fall in direct response to the controversy. This still begs the question of how to tell whether it's the controversy causing the fall or some other thing, and I don't have a great answer to how to determine that. I simply made a judgement call based on the visual aid of the graph -- local maxima on the day of the controversy = promise, sharp decline following the controversy = even more promise (since it will be easiest to model dramatic responses), uptick afterware = yet more promise (since that's where the money is). Any of my classifications are open to debate and revision.


Analysis

The obvious first step for determining whether my categorizations are relevant to promising market opportunities is to examine whether any individual categories show significantly more promise than any of the others. The code below puts the categories into a table and calculates the percentage of controversies in each category that looks promising. I drop any categories with < 2 entries and the "ignore" category.

In [88]:
# set up lists that will become columns in our new DataFram
category = []
total = []
num_promising = []
num_unpromising = []
promising = []
unpromising = []
perc_promising = []

# build lists
for cat in cats:
    category.append(cat.category)
    total.append(len(cat.promisings)+len(cat.unpromisings))
    num_promising.append(len(cat.promisings))
    num_unpromising.append(len(cat.unpromisings))
    promising.append(cat.promisings)
    unpromising.append(cat.unpromisings)
    perc_promising.append(len(cat.promisings)/(len(cat.promisings)+len(cat.unpromisings))*100)

# create dataframe
df = pd.DataFrame({
    "category" : category,           # name of category
    "total" : total,                 # total controversies in the category
    "num_promising" : num_promising,  # number of promising controversies in the category
    "num_unpromising" : num_unpromising,  # number of unpromising controversies in the category
    "promising" : promising,              # list of promising Controversy
    "unpromising" : unpromising,          # list of unpromising Controversy
    "perc_promising" : perc_promising # percent promsing
})

# drop categories with < 2 controversies, and ignore
df = df[df.total > 1]
df = df[df.category != "ignore"]

# display
df.sort_values("perc_promising")[["category", "total", "num_promising", "num_unpromising", "perc_promising"]]
Out[88]:
category total num_promising num_unpromising perc_promising
8 criminal 2 0 2 0.000000
13 politics 5 0 5 0.000000
14 congress 4 0 4 0.000000
2 sjw 8 1 7 12.500000
3 offensive 12 3 9 25.000000
7 workers 4 1 3 25.000000
5 sex 3 1 2 33.333333
9 impunity 8 6 2 75.000000
12 hack 4 3 1 75.000000

The SJW hypothesis

sjw

It's clear from these results that my "sjw" hypthosesis is false. Only 1 of the 8 controversies I labeled as sjw had promise for a trading algorithm:

In [89]:
def diplay_cons(list_of_cons):
    for con in list_of_cons:
        display(Markdown("##### " + con.company))
        print("Relevant Stock(s): {}".format(con.stocks))
        print("Date: {}".format(con.date.strftime("%Y-%m-%d")))
        print("Summary: {}".format(con.summary))
        if con.notes == con.notes:  #hack-y way to check for nan vals
            print("Notes: {}".format(con.notes))
        print("Source: {}".format(con.source))
        con.get_N_day_plot(90)
        plt.show()

Promising

In [90]:
diplay_cons(df[df["category"] == "sjw"].promising.values[0])
Papa John's
Relevant Stock(s): ['PZZA']
Date: 2018-07-11
Summary: Papa John's Founder Used N-Word On Conference Call
Notes: Better ingredients. Better Pizza. Papa John's
Source: https://www.forbes.com/sites/noahkirsch/2018/07/11/papa-johns-founder-john-schnatter-allegedly-used-n-word-on-conference-call/#4990b7334cfc

Unpromising

In [91]:
diplay_cons(df[df["category"] == "sjw"].unpromising.values[0])
Walmart
Relevant Stock(s): ['WMT']
Date: 2014-10-21
Summary: Walmart's Website Features a Section of 'Fat Girl Costumes'
Notes: LMFAO
Source: https://jezebel.com/walmarts-website-features-a-section-of-fat-girl-costum-1651125569
Disney
Relevant Stock(s): ['DIS']
Date: 2017-02-14
Summary: Disney Severs Ties With YouTube Star PewDiePie After Anti-Semitic Posts
Source: https://en.wikipedia.org/wiki/PewDiePie#Controversies,_release_from_network,_and_streaming_(2017)
YouTube
Relevant Stock(s): ['GOOG']
Date: 2017-02-14
Summary: Disney Severs Ties With YouTube Star PewDiePie After Anti-Semitic Posts
Notes: GOOG owns YouTube, but apparently accounts for only 3% of the company's value (source: https://www.thestreet.com/story/10887954/1/youtube-growth-impact-on-google-stock.html)
Source: https://en.wikipedia.org/wiki/PewDiePie#Controversies,_release_from_network,_and_streaming_(2017)
United Airlines
Relevant Stock(s): ['UAL']
Date: 2017-03-26
Summary: Two girls barred from United flight for wearing leggings
Source: https://www.bostonglobe.com/news/nation/2017/03/26/two-girls-barred-from-united-flight-for-wearing-leggings/WSVuMJEykxM85db1CCzB2N/story.html
Facebook
Relevant Stock(s): ['FB']
Date: 2017-04-10
Summary: Zuckerberg testifies over Russian interference
Source: https://www.youtube.com/watch?v=cyJosQBtzsw
Google
Relevant Stock(s): ['GOOG']
Date: 2017-08-04
Summary: James Damore diversity manifesto
Source: https://www.businessinsider.com/google-engineer-anti-diversity-manifesto-causes-uproar-2017-8
Facebook
Relevant Stock(s): ['FB']
Date: 2017-09-06
Summary: Facebook says fake accounts linked to Russia bought thousands of ads during US election
Source: https://www.businessinsider.com/facebook-says-fake-accounts-linked-to-russia-bought-ads-during-us-election-2017-9

offensive

The results aren't much better for the other category relevant to that hypothesis, "offensive", where only 3 of the 12 controversies showed any promise. (Note: these categories are overlapping; the results aren't promising so I'm not going into any detail as to how):

Promising

In [92]:
diplay_cons(df[df["category"] == "offensive"].promising.values[0])
Comcast Corporation
Relevant Stock(s): ['CMCSA']
Date: 2015-01-28
Summary: Comcast called a customer an asshole in writing
Source: https://www.elliott.org/is-this-enough-compensation/comcast-thinks-husband-ahole-put-writing/
Fox
Relevant Stock(s): ['FOXA']
Date: 2017-04-01
Summary: Bill O'Reilly sexual assault
Source: http://www.latimes.com/entertainment/tv/la-et-st-bill-oreilly-controversy-timeline-20170420-htmlstory.html#
Papa John's
Relevant Stock(s): ['PZZA']
Date: 2018-07-11
Summary: Papa John's Founder Used N-Word On Conference Call
Notes: Better ingredients. Better Pizza. Papa John's
Source: https://www.forbes.com/sites/noahkirsch/2018/07/11/papa-johns-founder-john-schnatter-allegedly-used-n-word-on-conference-call/#4990b7334cfc

It may be of interest that 2 of the 3 promising controversies - Papa John's and Comcast - were a result of offensive language (language could've been it's own category). This is obviously only a tiny amount of data, but it could warrant further investigation to see if more offensive language based controversies have a predictable market reaction.

On the other hand, the PewDiePie controversy was about offensive language, but doesn't appear to have affected Google's stock (he's a YouTube star). Google being as massive as it is, and PewDiePie not even being a real employee could mean that we simply need to be more specific. Both the promising language controversies were regarding language directly from an employee.

Unpromising

In [93]:
diplay_cons(df[df["category"] == "offensive"].unpromising.values[0])
Walmart
Relevant Stock(s): ['WMT']
Date: 2014-10-21
Summary: Walmart's Website Features a Section of 'Fat Girl Costumes'
Notes: LMFAO
Source: https://jezebel.com/walmarts-website-features-a-section-of-fat-girl-costum-1651125569
Target
Relevant Stock(s): ['TGT']
Date: 2014-10-22
Summary: Petition targets ‘Breaking Bad’ action figures
Source: https://www.pressherald.com/2014/10/22/petition-targets-breaking-bad-action-figures/
Disney
Relevant Stock(s): ['DIS']
Date: 2017-02-14
Summary: Disney Severs Ties With YouTube Star PewDiePie After Anti-Semitic Posts
Source: https://en.wikipedia.org/wiki/PewDiePie#Controversies,_release_from_network,_and_streaming_(2017)
YouTube
Relevant Stock(s): ['GOOG']
Date: 2017-02-14
Summary: Disney Severs Ties With YouTube Star PewDiePie After Anti-Semitic Posts
Notes: GOOG owns YouTube, but apparently accounts for only 3% of the company's value (source: https://www.thestreet.com/story/10887954/1/youtube-growth-impact-on-google-stock.html)
Source: https://en.wikipedia.org/wiki/PewDiePie#Controversies,_release_from_network,_and_streaming_(2017)
United Airlines
Relevant Stock(s): ['UAL']
Date: 2017-03-26
Summary: Two girls barred from United flight for wearing leggings
Source: https://www.bostonglobe.com/news/nation/2017/03/26/two-girls-barred-from-united-flight-for-wearing-leggings/WSVuMJEykxM85db1CCzB2N/story.html
United Airlines
Relevant Stock(s): ['UAL']
Date: 2017-04-10
Summary: Pulled passenger off of flight
Source: https://www.youtube.com/watch?v=VrDWY6C1178
Google
Relevant Stock(s): ['GOOG']
Date: 2017-08-04
Summary: James Damore diversity manifesto
Source: https://www.businessinsider.com/google-engineer-anti-diversity-manifesto-causes-uproar-2017-8
YouTube
Relevant Stock(s): ['GOOG']
Date: 2017-11-04
Summary: On YouTube Kids, Startling Videos Slip Past Filters
Notes: GOOG owns YouTube, but apparently accounts for only 3% of the company's value (source: https://www.thestreet.com/story/10887954/1/youtube-growth-impact-on-google-stock.html)
Source: https://www.nytimes.com/2017/11/04/business/media/youtube-kids-paw-patrol.html?_r=0
Vice Media
Relevant Stock(s): ['DIS', 'FOX']
Date: 2017-12-23
Summary: Vice sexual harassment scandal
Notes: Vice remains private but big investors include DIS-FOXA (source: https://www.nasdaq.com/article/will-vice-media-ipo-in-2017-everything-investors-need-to-know-cm724799)
Source: https://www.nasdaq.com/article/will-vice-media-ipo-in-2017-everything-investors-need-to-know-cm724799

In [94]:
df.sort_values("perc_promising")[["category", "total", "num_promising", "num_unpromising", "perc_promising"]]
Out[94]:
category total num_promising num_unpromising perc_promising
8 criminal 2 0 2 0.000000
13 politics 5 0 5 0.000000
14 congress 4 0 4 0.000000
2 sjw 8 1 7 12.500000
3 offensive 12 3 9 25.000000
7 workers 4 1 3 25.000000
5 sex 3 1 2 33.333333
9 impunity 8 6 2 75.000000
12 hack 4 3 1 75.000000

The impunity hypothesis

While the sjw hypothesis is clearly false, my instincts regarding corporate impunity appear to have more potential. 62% of "impunity" controversies and 75% of "hack" controversies appear promising. It should be noted that all 4 "hack" controversies overlap with impunity, so I will analyze them as seperate groups of "non-hack" and "hack".

In [102]:
def remove_hacks(nproms):
    """function to remove the controversies labeled "hack" from a list of controversies"""
    for n in nproms:
        if "hack" in n.categories:
            nproms.remove(n)

proms = df[df["category"] == "impunity"].promising.values[0]
unproms = df[df["category"] == "impunity"].unpromising.values[0]

# remove the hacks
remove_hacks(proms)
remove_hacks(unproms)

df.loc[df["category"] == "impunity", "total"] = len(unproms) + len(proms)
df.loc[df["category"] == "impunity", "num_promising"] = len(proms)
df.loc[df["category"] == "impunity", "num_unpromising"] = len(unproms)
df.loc[df["category"] == "impunity", "perc_promising"] = (len(proms)/(len(unproms) + len(proms))) * 100

df.sort_values("perc_promising")[["category", "total", "num_promising", "num_unpromising", "perc_promising"]]
Out[102]:
category total num_promising num_unpromising perc_promising
8 criminal 2 0 2 0.000000
13 politics 5 0 5 0.000000
14 congress 4 0 4 0.000000
2 sjw 8 1 7 12.500000
3 offensive 12 3 9 25.000000
7 workers 4 1 3 25.000000
5 sex 3 1 2 33.333333
9 impunity 4 3 1 75.000000
12 hack 4 3 1 75.000000

Non-hack

promising

In [96]:
diplay_cons(df[df["category"] == "impunity"].promising.values[0])
Cigna
Relevant Stock(s): ['CI']
Date: 2016-01-22
Summary: Cigna temporarily banned from new Medicare plans
Notes: disclosed late on the 21st but the news seems to have become widely known on the 22
Source: https://www.usatoday.com/story/money/2016/01/22/cigna-medicare-sanctions/79160738/
Wells Fargo
Relevant Stock(s): ['WFC']
Date: 2016-09-08
Summary: Wells Fargo Opened a Couple Million Fake Accounts
Source: https://www.bloomberg.com/view/articles/2016-09-09/wells-fargo-opened-a-couple-million-fake-accounts
Equifax
Relevant Stock(s): ['EFX']
Date: 2017-09-07
Summary: Equifax Hackers Steal Personal Details of Up to 143 Million People
Source: http://fortune.com/2017/09/07/equifax-hackers-personal-details-143-million-people/
Apple
Relevant Stock(s): ['AAPL']
Date: 2017-12-20
Summary: Apple Is Slowing Down Your Old iPhone
Source: http://fortune.com/2017/12/20/apple-iphone-battery-slowdown/

unpromising

In [97]:
diplay_cons(df[df["category"] == "impunity"].unpromising.values[0])
Samsung
Relevant Stock(s): ['EWY']
Date: 2017-08-25
Summary: Samsung's Bribery Charges
Notes: No data on the official stock price but using an ETF 22% of its assets invested in Samsung as a proxy.
Source: https://www.bbc.com/news/business-41033568

Analysis

There looks to be some predictability to non-hack-related, corporate impunity based controversies. It's important to point out that the one stock that isn't so promising is actually just an ETF proxy for Samsung's stock (see "Notes" above). It also could be argued that the Samsung controversy is promising, I marked it unpromising due to the fact that ETF's would be very difficult to predict given that they're affected by a wide variety of stocks.

Two of the promising controversies could be considered "fraud" which could have been it's own category.

Also of note is that the market responses don't follow an obvious consistent shape. Cigna and Apple have a triangle wave, while Wells Fargo is closer to a square wave. All of them have gradual drops, in comparison to the data below.

Hack

promising

In [98]:
diplay_cons(df[df["category"] == "hack"].promising.values[0])
Yahoo
Relevant Stock(s): ['AABA']
Date: 2016-12-14
Summary: Yahoo says 1 billion user accounts stolen in what could be biggest hack ever
Notes: Altaba Inc. is the company that owns Yahoo
Source: https://www.businessinsider.com/yahoo-data-breach-billion-accounts-2016-12?r=UK&IR=T
Equifax
Relevant Stock(s): ['EFX']
Date: 2017-09-07
Summary: Equifax Hackers Steal Personal Details of Up to 143 Million People
Source: http://fortune.com/2017/09/07/equifax-hackers-personal-details-143-million-people/
Apple
Relevant Stock(s): ['AAPL']
Date: 2017-11-28
Summary: There's an embarrassing and dangerous security hole in the latest Mac software
Source: https://www.businessinsider.com/macos-high-sierra-can-be-hacked-with-username-root-and-no-password-2017-11

unpromising

In [99]:
diplay_cons(df[df["category"] == "hack"].unpromising.values[0])
Yahoo
Relevant Stock(s): ['AABA']
Date: 2017-10-03
Summary: Yahoo says all three billion accounts hacked in 2013 data theft
Source: https://www.reuters.com/article/us-yahoo-cyber/yahoo-says-all-three-billion-accounts-hacked-in-2013-data-theft-idUSKCN1C82O1

Analysis

Here are the results that are the most interesting to me. Three of the four hack controversies appear to have market responses. Additionally, the responses appear immediate, in a way that appears to me to be more predictable than the variety of response slopes I think I observe in the "impunity" hypothesis. Of the three promising controversies, the two controversies with the most obvious potential to be profitable, Equifax and Yahoo, are direct responses to data breaches, whereas the Apple story (which looks less profitable) was just a response to the potential of a hack.

Also of note, is that the unpromising controversy in this category isn't direct news of a data breach, but rather an update on a 2013 databreach 4 years later. I didn't include the 2013 breach in my original data, however I can manually construct it here in order to take a look at it. I also manually constructed a couple other Yahoo hack stories that I found during this research:

In [101]:
from generate_and_save_Controversy_list import date_to_datetime

yahoo2013 = Controversy("Yahoo", ["AABA"], date_to_datetime("1/7/13"), "Yahoo 2013 Mail Hack", "https://thenextweb.com/insider/2013/01/07/yahoo-mail-users-hit-by-widespread-hacking-xss-exploit-seemingly-to-blame/", None)
yahoo2014 = Controversy("Yahoo", ["AABA"], date_to_datetime("1/30/14"), "Yahoo 2014 Mail Hack", "https://www.yahoo.com/news/yahoo-email-account-passwords-stolen-002044026--finance.html", None)
yahoo2016 = Controversy("Yahoo", ["AABA"], date_to_datetime("9/22/16"), "Yahoo reports another 2014 Mail Hack", "https://en.wikipedia.org/wiki/Yahoo!_data_breaches#Late_2014_breach", None)
diplay_cons([yahoo2013, yahoo2014, yahoo2016])
Fetching stock data for the company Yahoo
Fetching data for stock AABA

Fetching stock data for the company Yahoo
Fetching data for stock AABA

Fetching stock data for the company Yahoo
Fetching data for stock AABA

Yahoo
Relevant Stock(s): ['AABA']
Date: 2013-01-07
Summary: Yahoo 2013 Mail Hack
Notes: 
Source: https://thenextweb.com/insider/2013/01/07/yahoo-mail-users-hit-by-widespread-hacking-xss-exploit-seemingly-to-blame/
Yahoo
Relevant Stock(s): ['AABA']
Date: 2014-01-30
Summary: Yahoo 2014 Mail Hack
Notes: 
Source: https://www.yahoo.com/news/yahoo-email-account-passwords-stolen-002044026--finance.html
Yahoo
Relevant Stock(s): ['AABA']
Date: 2016-09-22
Summary: Yahoo reports another 2014 Mail Hack
Notes: 
Source: https://en.wikipedia.org/wiki/Yahoo!_data_breaches#Late_2014_breach

These results are less promising than I had hoped for. The 2013 breach appears to have had no impact on the company's stock whatsoever. The 2014 hack, which was reported at that time, happened when the company's stock was already dropping. Had it happened maybe a day or so before, where that sharp drop off ocurred, I would consider it more promising. I checked my date quite thoroughly and think that data is accurate. This could be evidence of some sort of insider trading going on, but that's extremely speculative. The 2016 story is actually news of a 2014 hack, however it's the first time that hack was reported. There is some promise in that controversy, givem how immediate the drop off is afterwards.

Conclusion

To summarize, my sjw hypothesis was obviously incorrect, however my corporate impunity hypothesis appears to have more truth to it. One way my sjw hypothesis may turn out to be interesting is if I specifically study "language" based controversies, although I worry that these are too few and far in between to find a good dataset.

Of the corporate impunity controversies, it appears corporate hacks have particular promise, although the data from the 2013 and 2014 Yahoo hacks have somewhat mitigated my enthusiasm. Something that could be true is that data privacy issues have become more influential in the market only recently, as the public has become more aware of the problem.

Risks

The main risks associated with this entire analysis are:

  1. I'm looking for a pattern, so will be psychologically inclined to see it where it doesn't exist.
  2. We're working with peanuts in terms of data size here.

There are really no solutions I can imagine that would solve these issues, they appear inherent to this type of market analysis. It's clear to me now why so many hedge funds are bullshit machines -- markets and the events that shape them are very, very difficult to categorize. Political and social climates are constantly in flux, and so even if you can predict the market in one time and place, it's nearly impossible to determine whether it will behave the same way in the future.

It would be great if this idea were to make money, and it's apparent in my analysis that I'm hoping that's the case. There are plenty of ways to further massage categories and speculate on responses to make you think you have a lead, and there's no doubt I have done that to some extent in this analysis. Irrespective of potential future findings, we should consider that this is an intrinsically highly risky venture when deciding on whether to pursue it.

Future Study

All that being said, there may be enough here to warrant future investigations into data hacks in particular. This is the most promising avenue to me because of the data hacks that do look profitable,

  1. The market response appears more immediate compared to other categories (and therefore more easily predictable).
  2. This is a class of events that's easy to categorize.
  3. Because of 2, it will be easier to find larger datasets, which will work to mitigate the risks associated with speculating based on very slim pickings.

A cursory Google search led me to this page, which contains data on what must be nearly all of the major hack stories going back to 2004. This is a dataset where we could run a more rigorous study, with more sophisticated statistical analysis, to help determine if data hacks are worth investing in. For example, it could help clarify whether or not there's indeed a temporal element to the market response (i.e. is this only a recent phenomenon post 2015 or 2016?). I could classify the stories by whether or not they are new stories about a hack vs updates to an old story about a hack, the time between the story and the hack itself, whether data was actually stolen or just suspected to be vulnerable, etc. A lot more certainty could be gleaned from such a study, however I'm frankly unsure if the data presented here justifies a further investment.